#ifndef __BSP_GT911_H_
#define __BSP_GT911_H_

#include <stdint.h>

// IO定义 GT911 INT RST引脚 
#define GT911_INT_PIN                        LL_GPIO_PIN_10
#define GT911_INT_PORT                       GPIOB
#define GT911_RST_PIN                        LL_GPIO_PIN_11
#define GT911_RST_PORT                       GPIOB

// IO操作函数
#define GT911_RST_SET(n)                    (n)?LL_GPIO_SetOutputPin(GT911_RST_PORT, GT911_RST_PIN):LL_GPIO_ResetOutputPin(GT911_RST_PORT, GT911_RST_PIN)
#define GT911_INT_SET(n)                    (n)?LL_GPIO_SetOutputPin(GT911_INT_PORT, GT911_INT_PIN):LL_GPIO_ResetOutputPin(GT911_INT_PORT, GT911_INT_PIN)
#define GT911_INT_STATE()                   LL_GPIO_IsInputPinSet(GT911_INT_PORT, GT911_INT_PIN)

// I2C读写命令
// #define GT_CMD_WR 0X28 // 写命令
// #define GT_CMD_RD 0X29 // 读命令
#define GT_CMD_WR 0XBA // 写命令
#define GT_CMD_RD 0XBB // 读命令

// GT9147 部分寄存器定义
#define GT_CTRL_REG 0X8040  // GT911控制寄存器
#define GT_CFGS_REG 0X8047  // GT911配置起始地址寄存器
#define GT_CHECK_REG 0X80FF // GT911校验和寄存器
#define GT_PID_REG 0X8140   // GT911产品ID寄存器

#define GT_GSTID_REG 0X814E // GT911当前检测到的触摸情况
#define GT_TP1_REG 0X8150   // 第一个触摸点数据地址
#define GT_TP2_REG 0X8158   // 第二个触摸点数据地址
#define GT_TP3_REG 0X8160   // 第三个触摸点数据地址
#define GT_TP4_REG 0X8168   // 第四个触摸点数据地址
#define GT_TP5_REG 0X8170   // 第五个触摸点数据地址

uint8_t GT911_Send_Cfg(uint8_t mode);
uint8_t GT911_WR_Reg(uint16_t reg, uint8_t *buf, uint8_t len);
void GT911_RD_Reg(uint16_t reg, uint8_t *buf, uint8_t len);
uint8_t GT911_Init(void);
uint8_t GT911_Scan(uint8_t mode);
uint8_t Null_Scan(uint8_t i);


#endif
